﻿namespace YAPACS.RisServer.Services.ECharts;

/// <summary>
/// 系列
/// </summary>
public class SeriesItem
{
    /// <summary>
    /// 系列显示类型 
    /// bar:基础柱状图、多系列柱状图
    /// line:折线图
    /// pie :饼图
    /// scatter:散点图
    /// </summary>
    public string Type { get; set; } = "bar";

    /// <summary>
    /// 系列名称
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// 柱子宽度
    /// 占类目宽度的百分比
    /// </summary>
    public string barWidth { get; set; } = "50%";

    /// <summary>
    /// 系列分布
    /// column 代表除第一列为类目外，其余每一列就是一个系列
    /// row 除第一行为类目外，其余每一行就是一个系列
    /// </summary>
    public string SeriesLayoutBy { get; set; } = "row";


    /// <summary>
    /// 用于配置维度映射
    /// 意思是配置某个维度到x轴还是到y轴
    /// </summary>
    public object Encode { get; set; }


    /// <summary>
    ///  系列柱子样式(用于柱状图)
    ///  barBorderRadius: 圆角,
    ///  borderWidth: 边框宽度,
    ///  borderType: 边框类型'solid',
    ///  borderColor: 边框颜色 '#73c0de',
    ///  shadowColor: 阴影颜色 '#5470c6',
    ///  shadowBlur: 阴影聚焦
    /// </summary>
    public object ItemSyle { get; set; } = new
    {
        color = "#0f6cbd",
        ShadowColor = "#91cc75",
        BorderType = "dashed",
        Opacity = 1
    };


    /// <summary>
    /// 是否显示背景色
    /// </summary>
    public bool ShowBackground { get; set; } = false;


    /// <summary>
    /// 背景样式
    /// </summary>
    public object BackGroundStyle { get; set; }


    /// <summary>
    /// 堆叠类别
    /// 拥有相同堆叠类别的系列，将堆叠在一起
    /// (柱状图、折线图都可以堆叠)
    /// </summary>
    public string Stack { get; set; }


    /// <summary>
    /// 是否打开实时排序
    /// (用于"动态排序柱状图")
    /// </summary>
    public bool RealTimeSort { get; set; } = false;


    /// <summary>
    /// 系列标签
    /// show: true,是否显示
    /// position: 'right',显示位置
    /// valueAnimation: true 值动态改变
    /// </summary>
    public object Label { get; set; } = new
    {
        show = true,
        Position = "top",
        ValueAnimation = false
    };

    /// <summary>
    /// 面积样式
    /// (专用于折线图中的“区域面积图”)
    /// </summary>
    public object AreaStyle { get; set; }


    /// <summary>
    /// 折线成平滑曲线
    /// (专用于折线图中的"曲线图")
    /// </summary>
    public bool Smooth { get; set; } = false;


    /// <summary>
    /// 获取schema
    /// </summary>
    /// <returns></returns>
    public Dictionary<string, object> GetSchema()
    {
        Dictionary<string, object> schema = [];

        // 系列类型
        if (!string.IsNullOrEmpty(Type))
        {
            schema.Add("type", Type);
        }

        // 是否显示背景
        if (ShowBackground)
        {
            schema.Add("showBackground", true);
        }

        if (!string.IsNullOrEmpty(barWidth))
        {
            schema.Add("barWidth", barWidth);
        }

        // 背景样式
        if (BackGroundStyle != null)
        {
            schema.Add("backgroundStyle", BackGroundStyle);
        }

        // 系列名称
        if (!string.IsNullOrEmpty(Name))
        {
            schema.Add("name", Name);
        }

        // 系列分布
        if (!string.IsNullOrEmpty(SeriesLayoutBy))
        {
            schema.Add("seriesLayoutBy", SeriesLayoutBy);
        }

        // 维度映射
        if (Encode != null)
        {
            schema.Add("encode", Encode);
        }

        // 系列柱条样式
        if (ItemSyle != null)
        {
            schema.Add("itemStyle", ItemSyle);
        }

        // 堆叠类名
        if (!string.IsNullOrEmpty(Stack))
        {
            schema.Add("stack", Stack);
        }

        // 是否实时排序
        if (RealTimeSort)
        {
            schema.Add("realtimeSort", true);
        }

        //系列标签
        if (Label != null)
        {
            schema.Add("label", Label);
        }

        //区域面积图，区域样式
        if (AreaStyle != null)
        {
            schema.Add("areaStyle", AreaStyle);
        }

        // 是否为曲线图
        if (Smooth)
        {
            schema.Add("smooth", true);
        }

        return schema;
    }
}
